﻿package member;

import java.io.IOException;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class EditServet extends HttpServlet {


//=============【『利用者検索結果』画面より受けとったパラメータで『利用者情報変更』画面を表示】======

	public void doGet(HttpServletRequest request,HttpServletResponse response)
			throws ServletException, IOException {

//　入力パラメータの文字エンコーディング
		request.setCharacterEncoding("UTF-8");

//　入力パラメータを取得
//　変更するレコードをidで指定
		String id = request.getParameter("id");

//　SQL文を記述
		String sql = "SELECT * FROM members WHERE ID = " + id;

		Connection con = null;
		Statement smt = null;

		try{
//　データベースを接続するためのConnectionオブジェクトを取得
//　SQLを発行するためのStatementオブジェクトを取得
			con = common.DBManager.getConnection();
			smt = con.createStatement();

//　StatementオブジェクトのexecuteUpdate()メソッドでSQLを発行(検索)
			ResultSet rs = smt.executeQuery( sql );

			MemberBean bean = new MemberBean();
			while(rs.next()){
				bean.setId(rs.getInt("id"));
				bean.setName(rs.getString("name"));
				bean.setRuby(rs.getString("ruby"));
				bean.setPassword(rs.getString("user_id"));
			}

		//　リクエストスコープに"引数1"という名前で引数2の文字列を登録
			request.setAttribute("bean", bean);

		}catch( SQLException e ){

			throw new ServletException( e );

		}finally{

			if( smt != null ){

				try{
					smt.close();
				}catch( SQLException ignore ){
					//　何もしない
				}
			}
			if( con != null ){

				try{
					con.close();
				}catch( SQLException ignore ){
					//　何もしない
				}
			}
		}

//　JSPに画面遷移、フォワード
		request.getRequestDispatcher( "/member/userMemberEdit.jsp" ).forward(request, response);
	}


//=============【　正常処理　】『利用者情報変更』画面より受けとったパラメータで『利用者情報変更確認』画面を表示======
//=============【エラー発生時】『利用者情報変更』画面へ戻る======

	public void doPost(HttpServletRequest request,HttpServletResponse response)
			throws ServletException, IOException {

//　入力パラメータの文字エンコーディング
		request.setCharacterEncoding("UTF-8");

//　入力パラメータを取得
//　変更するレコードをidで指定
		String id = request.getParameter("id");
		String user_id = request.getParameter( "user_id" );
		String password = request.getParameter( "password" );
		String name = request.getParameter( "name" );
		String ruby = request.getParameter( "ruby" );

//　エラーメッセージを格納するArrayListの生成
		ArrayList<String> error_message = new ArrayList<String>();

//　エラーチェックのフラグ
		boolean error = false;

//　エラーのフィールドを赤く表示
		String error_user_id = null;
		String error_password = null;
		String error_name = null;
		String error_ruby = null;

//　遷移先のパス
		String path = null;

//----------【例外処理】----------

//　未入力の確認

		if((user_id == null || user_id.equals("")) ||
				(password == null || password.equals("")) ||
				(name == null || name.equals("")) ||
				(ruby == null || ruby.equals(""))){

			error_message.add("すべての項目を入力してください");
			error = true;

			if(user_id == null || user_id.equals("")){

				error_user_id = "error";
			}
			if(password == null || password.equals("")){

				error_password = "error";
			}
			if(name == null || name.equals("")){

				error_name = "error";
			}
			if(ruby == null || ruby.equals("")){

				error_ruby = "error";
			}
		}

//　半角英数字の確認（user_id、password）



//　全角カナの確認（ruby）
		//　入力パターンを登録します
		Pattern pattern_ruby = Pattern.compile("[ァ-ヶー－]");;

		//　指定された入力とこのパターンをマッチする正規表現エンジンを作成
		Matcher matcher_ruby = pattern_ruby.matcher(ruby);
		//　入力された値が正規表現とマッチしているか調べる
		//　正規表現のパターンとマッチした場合にのみ true
		//　matches メソッドは、入力シーケンス全体とパターンをマッチする
		if( !matcher_ruby.matches() ){
			error_message.add("フリガナは、全角カタカナで入力してください");
			error = true;
			error_ruby = "error";
		}


		if(!error){

//----------【例外なし正常処理】----------

			MemberBean bean2 = new MemberBean();
			bean2.setId(Integer.parseInt(id));
			bean2.setUserId(user_id);
			bean2.setPassword(password);
			bean2.setName(name);
			bean2.setRuby(ruby);

			request.setAttribute("bean", bean2);

			path = "/book/userBookEditCheck.jsp";

		}else{

//----------【例外処理】----------

			MemberBean bean = new MemberBean();
			bean.setId(Integer.parseInt(id));
			bean.setUserId(user_id);
			bean.setPassword(password);
			bean.setName(name);
			bean.setRuby(ruby);

			request.setAttribute("bean", bean);

			//　リクエストスコープに"引数1"という名前で引数2の文字列を登録
			request.setAttribute( "error_message" , error_message );
			request.setAttribute( "error_user_id" , error_user_id );
			request.setAttribute( "error_password" , error_password );
			request.setAttribute( "error_name" , error_name );
			request.setAttribute( "error_ruby" , error_ruby );;

			path = "/book/userBookEdit.jsp";
		}

//　JSPに画面遷移、フォワード
		RequestDispatcher dispatcher = request.getRequestDispatcher( path );
		dispatcher.forward(request, response);
	}
}
